/* app_matrix_add_example.c */

#include "app.h"
#include "app_matrix_data.h"


/*******************************************************************************
 * Definitions
 ******************************************************************************/

/*******************************************************************************
 * Variables
 ******************************************************************************/

/*******************************************************************************
 * Prototypes
 ******************************************************************************/

/*******************************************************************************
 * Code
 ******************************************************************************/

void app_arm_matrix_scale_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(arm_matrix_output_M_f32.pData, 0, sizeof(float32_t) * MATRIX_INPUT_M1_ROWS * MATRIX_INPUT_M1_COLS );

    /* 开始计算. */
    TimerCount_Start(); /* 开始计时. */
    arm_mat_scale_f32( &arm_matrix_input_M1_f32,
                       0.1f, /* scaler. */
                       &arm_matrix_output_M_f32 );
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    PRINTF("numRows: %d, numCols: %d\r\n", MATRIX_INPUT_M1_ROWS, MATRIX_INPUT_M1_COLS);
    for (uint16_t row = 0; row < MATRIX_INPUT_M1_ROWS; row++)
    {
        for (uint16_t col = 0; col < MATRIX_INPUT_M1_COLS; col++)
        {
            PRINTF("%9f, ", arm_matrix_output_M_f32.pData[row * MATRIX_INPUT_M1_COLS + col]);
        }
        PRINTF("\r\n");
    }
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

void app_pq_matrix_scale_f32_example(void)
{
    PRINTF("%s()\r\n", __func__);

    /* 清零输出矩阵数据. */
    memset(matrix_output_M_data_f32, 0, sizeof(float32_t) * MATRIX_INPUT_M1_ROWS * MATRIX_INPUT_M1_COLS );

    /* 使用PowerQuad计算. */
    PQ_SetFormat(POWERQUAD, kPQ_CP_MTX, kPQ_Float);
    TimerCount_Start(); /* 开始计时. */
    PQ_MatrixScale(POWERQUAD,
        POWERQUAD_MAKE_MATRIX_LEN(MATRIX_INPUT_M1_ROWS, MATRIX_INPUT_M1_COLS, 0), /* length. */
        0.1f, /* scaler. */
        (void *)arm_matrix_input_M1_f32.pData,
        (void *)arm_matrix_output_M_f32.pData );
    PQ_WaitDone(POWERQUAD);
    TimerCount_Stop(tick_counter_val); /* 结束计时. */

    /* 打印计算结果. */
    PRINTF("numRows: %d, numCols: %d\r\n", MATRIX_INPUT_M1_ROWS, MATRIX_INPUT_M1_COLS);
    for (uint16_t row = 0; row < MATRIX_INPUT_M1_ROWS; row++)
    {
        for (uint16_t col = 0; col < MATRIX_INPUT_M1_COLS; col++)
        {
            PRINTF("%9f, ", arm_matrix_output_M_f32.pData[row * MATRIX_INPUT_M1_COLS + col]);
        }
        PRINTF("\r\n");
    }
    PRINTF("done with %d us.\r\n\r\n", tick_counter_val/96u); /* 打印计算时间. */
}

/* EOF. */

